home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 235_01 / ovattrib.c < prev    next >
Text File  |  1987-06-16  |  8KB  |  232 lines

  1. /*  015  14-Feb-87  ovattrib.c
  2.  
  3.         Copyright (c) 1987 by Blue Sky Software.  All rights reserved.
  4. */
  5.  
  6. #include "ov.h"
  7.  
  8. #define ABOXROWS (6)                   /* # rows in attribute dialog box */
  9. #define ABOXCOLS (26)                  /* # columns/row in dialog box */
  10. #define ABOXFROW (FIRST_NROW+3)        /* first screen row of dialog box */
  11. #define ABOXFCOL (28)                  /* first screen col of dialog box */
  12.  
  13. extern struct menu_selection top_file_menu[], *top_menu;
  14.  
  15. int attrib_a(), attrib_h(), attrib_r(), attrib_s(), attrib_set(), attrib_quit();
  16.  
  17. struct menu_selection top_attrib_menu[] = {
  18.    { "Enter", "Change the attributes as shown", attrib_set, top_file_menu },
  19.    { "Archive", "Toggle the Archive attribute", attrib_a, NULL },
  20.    { "Hidden", "Toggle the Hidden attribute", attrib_h, NULL },
  21.    { "Read/only", "Toggle the Read/Only attribute", attrib_r, NULL },
  22.    { "System", "Toggle the System attribute", attrib_s, NULL },
  23.    { "Quit", "Don't change the current attributes", attrib_quit, top_file_menu },
  24.    { NULL, NULL, NULL, NULL }
  25. };
  26.  
  27. static char *boxsave;
  28. static char *file_to_set;
  29. static unsigned char attrib_to_set;
  30. static char *tagged_name = "TAGGED FILES";
  31.  
  32. extern WINDOW cw;
  33. extern FILE_ENT files[];
  34. extern unsigned char attribs[], restricted;
  35.  
  36.  
  37. /******************************************************************************
  38.  **                    A T T R I B _ C U R R E N T                           **
  39.  *****************************************************************************/
  40.  
  41. attrib_current() {     /* set the attributes of the current file */
  42.  
  43.    FILE_ENT *fp = &files[cw.curidx];
  44.  
  45.    /* setup the attribute screen with current file name and current file
  46.       attributes */
  47.  
  48.    attrib_setup(fp->name,fp->flags & (RDONLY | HIDDEN | SYSTEM | ARCHIVE));
  49. }
  50.  
  51.  
  52. /******************************************************************************
  53.  **                    A T T R I B _ T A G G E D                             **
  54.  *****************************************************************************/
  55.  
  56. attrib_tagged() {      /* set the attributes of all tagged files */
  57.  
  58.    /* setup the attribute screen with tagged file indicator and default
  59.       attributes (none) */
  60.  
  61.    attrib_setup(tagged_name,0);
  62. }
  63.  
  64.  
  65. /******************************************************************************
  66.  **                      A T T R I B _ Q U I T                               **
  67.  *****************************************************************************/
  68.  
  69. attrib_quit() {        /* quit the attribute setup with changing any */
  70.  
  71.    top_menu = top_file_menu;   /* restore file menu as main */
  72.  
  73.    restricted = FALSE;         /* enable all commands */
  74.  
  75.    /* remove the dialog box if attrib_set didn't already */
  76.  
  77.    if (boxsave) {
  78.       popdwn(ABOXFROW,ABOXFCOL,ABOXROWS,ABOXCOLS,boxsave); /* remove the box */
  79.       free(boxsave);              /* release display memory save area */
  80.    }
  81. }
  82.  
  83.  
  84. /******************************************************************************
  85.  **                    A T T R I B _ S E T U P                               **
  86.  *****************************************************************************/
  87.  
  88. attrib_setup(name,def_attribs) /* setup the attribute modification window */
  89. char *name;
  90. int def_attribs;
  91. {
  92.  
  93.    top_menu = top_attrib_menu; /* setup the attrib menu as the main menu */
  94.  
  95.    restricted = TRUE;          /* disable cursor movement, etc */
  96.  
  97.    /* allocate a save area for the video memory overlayed by the dialog box */
  98.  
  99.    boxsave = (char *) Malloc(ABOXROWS * ABOXCOLS * 2);
  100.  
  101.    /* create a dialog box for the attribute display */
  102.  
  103.    setvattrib(DIS_BOX);
  104.  
  105.    popup(ABOXFROW,ABOXFCOL,ABOXROWS,ABOXCOLS,boxsave);
  106.  
  107.    disp_str_at(" Set Attributes ",ABOXFROW,ABOXFCOL+2);  /* box title */
  108.  
  109.    setvattrib(DIS_HIBOX);              /* display the allowed attrib settings */
  110.    disp_str_at(" R H S A ",ABOXFROW+2,ABOXFCOL+15);
  111.    setvattrib(DIS_BOX);
  112.  
  113.    gotorc(ABOXFROW+3,ABOXFCOL+2);      /* display the file name */
  114.    out_str(name,22,' ');
  115.  
  116.    gotorc(ABOXFROW+3,ABOXFCOL+15);     /* display the initial attributes */
  117.    disp_attrib(def_attribs);
  118.  
  119.    setvattrib(DIS_NORM);
  120.  
  121.    file_to_set = name;                 /* remember the settings */
  122.    attrib_to_set = def_attribs;
  123. }
  124.  
  125.  
  126. /******************************************************************************
  127.  **                      A T T R I B _ S E T                                 **
  128.  *****************************************************************************/
  129.  
  130. attrib_set() {         /* give the current or tagged the selected attributes */
  131.  
  132.    register int i;
  133.    register FILE_ENT *fp;
  134.  
  135.    /* we are actually going to set attributes, remove the dialog box so its
  136.       not in the way */
  137.  
  138.    popdwn(ABOXFROW,ABOXFCOL,ABOXROWS,ABOXCOLS,boxsave); /* remove the box */
  139.  
  140.    free(boxsave);              /* release display memory save area */
  141.    boxsave = NULL;             /* so attrib_quit knows box is removed */
  142.  
  143.    if (file_to_set == tagged_name) {           /* set tagged files? */
  144.       for (i = 0, fp = files; i < cw.nfiles && !brkout(); i++, fp++)
  145.          if (fp->flags & TAGGED)
  146.             change_attrib(fp,i);
  147.  
  148.    } else              /* only set current file */
  149.  
  150.       change_attrib(&files[cw.curidx],cw.curidx);
  151.  
  152.    attrib_quit();                      /* use the quit code to exit */
  153. }
  154.  
  155.  
  156. /******************************************************************************
  157.  **                     C H A N G E _ A T T R I B                            **
  158.  *****************************************************************************/
  159.  
  160. static int
  161. change_attrib(fp,idx)          /* change the attributes of a file */
  162. register FILE_ENT *fp;
  163. register int idx;
  164. {
  165.    char *fn;
  166.  
  167.    fn = fname(fp);
  168.    setattrib(fn,attrib_to_set);        /* zap the file attributes */
  169.    free(fn);
  170.  
  171.    /* update the flags in the files[] structure */
  172.  
  173.    fp->flags = (fp->flags & ~(ARCHIVE | RDONLY | HIDDEN | SYSTEM)) | attrib_to_set;
  174.  
  175.    /* update the display if attributes are shown and this file is on screen */
  176.  
  177.    if (cw.info_display && on_screen(idx)) {
  178.       gotorc(idx2sr(idx),idx2sc(idx));
  179.       disp_file(fp,idx == cw.curidx);
  180.    }
  181. }
  182.  
  183.  
  184. /******************************************************************************
  185.  **                           A T T R I B _ x                                **
  186.  *****************************************************************************/
  187.  
  188. static int
  189. attrib_a() {           /* toggle the ARCHIVE attribute */
  190.  
  191.    attrib_toggle(ARCHIVE);
  192. }
  193.  
  194.  
  195. static int
  196. attrib_r() {           /* toggle the READ ONLY attribute */
  197.  
  198.    attrib_toggle(RDONLY);
  199. }
  200.  
  201.  
  202. static int
  203. attrib_h() {           /* toggle the HIDDEN attribute */
  204.  
  205.    attrib_toggle(HIDDEN);
  206. }
  207.  
  208.  
  209. static int
  210. attrib_s() {           /* toggle the SYSTEM attribute */
  211.  
  212.    attrib_toggle(SYSTEM);
  213. }
  214.  
  215.  
  216. /******************************************************************************
  217.  **                      A T T R I B _ T O G G L E                           **
  218.  *****************************************************************************/
  219.  
  220. static int
  221. attrib_toggle(at)      /* toggle the state of the passed attribute */
  222. int at;
  223. {
  224.  
  225.    attrib_to_set ^= at;                /* first toggle the attribute */
  226.  
  227.    gotorc(ABOXFROW+3,ABOXFCOL+15);     /* then redisplay the current settings */
  228.    setvattrib(DIS_BOX);
  229.    disp_attrib(attrib_to_set);
  230.    setvattrib(DIS_NORM);
  231. }
  232.